package com.IO;

import java.io.File;
import java.io.IOException;

public class TestFile {
    public static void main(String[] args) {
        //=========File类的构造方法==========
        //File类构造方法不会检验这个文件或文件夹是否真实存在，
        //因此无论该路径下是否存在文件或者目录，
        //都不影响File对象的创建。
        //注意路径中的"\"是转义字符"\\"表示转义转义字符="\"
        //注意路径不区分大小写

        //直接传文件路径
        String path = "E:\\testFile.txt";
        File f1 = new File(path);
        // 通过父路径和子路径字符串
        String parent = "E:\\testFile";
        String child = "firstFile.txt";
        File f2 = new File(parent, child);  //等价于E:\\testFile\\fisrtFile.txt
        //通过父类File对象和子路径
        File fatherobj = new File("E:\\testFile");
        String childPath = "secondFile.txt";
        File f3 = new File(fatherobj,childPath);//等价于E:\\testFile\\secondFile.txt

        //=========File类的常用方法=========
        System.out.println("文件的绝对路径:"+f2.getAbsolutePath());//文件的绝对路径:E:\testFile\firstFile.txt
        System.out.println("文件的构造路径:"+f2.getPath());//文件的构造路径:E:\testFile\firstFile.txt
        System.out.println("文件名称:"+f2.getName());//文件名称:firstFile.txt
        System.out.println("文件长度:"+f2.length()+"字节");//文件长度:0字节

        //=========File类的判断方法=========
        //判断File表示的文件/目录是否存在
        System.out.println(f1.exists());//true
        //判断是否为目录
        System.out.println(f1.isDirectory());//false
        //判断是否为文件
        System.out.println(f1.isFile());//true

        //=========创建与删除=========
        //createNewFile() 创建文件  这里会判断是否已经存在 存在:不创建并返回false,不存在:传建并返回true
        try {
            System.out.println(f1.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }
        //mkdir(),mkdirs() 创建目录 返回值同上,
        // 另:mkdir:仅创建一级目录,
        // mkdirs:创建由此File表示的目录，包括任何必需但不存在的父目录。推荐使用
        File f4 = new File("E:\\testFile\\makeDir\\testMakeDirs");
        System.out.println(f4.mkdirs());//true

        //delete() 删除File所表示的目录/文件
        //另:若为目录,必须为空,且删除的是最里层文件/目录
        System.out.println(f1.delete());//true
        System.out.println(f4.delete());//true
        System.out.println(f4.delete());//false 已经不存在了

        //目录的遍历
        //根据返回的对象不同分为
        //String---list()   名字
        //File-----listFiles() File对象
        //注意listFiles在获取指定目录下的文件或者文件夹时必须满足下面两个条件
        //1，指定的目录必须存在
        //2，指定的必须是目录。否则容易引发返回数组为null，出现NullPointerException异常
        //本例基于本人的电脑 E:\FFOutput目录
        File file = new File("E:\\AAA开发文档");
        for (String name:file.list()) {
            System.out.println(name);
            /*
            589397 《Android Studio开发实战 从零基础到App上线》源码.rar
            631554 Android开发：从0到1.pdf
            654431 Android开发实例大全 第2版.pdf
            Android Studio开发实战：从零基础到App上线.pdf
            第一行代码(附源码)
            */
        }
        for (File f:file.listFiles()) {
            System.out.println(f);
            /*
            E:\AAA开发文档\589397 《Android Studio开发实战 从零基础到App上线》源码.rar
            E:\AAA开发文档\631554 Android开发：从0到1.pdf
            E:\AAA开发文档\654431 Android开发实例大全 第2版.pdf
            E:\AAA开发文档\Android Studio开发实战：从零基础到App上线.pdf
            E:\AAA开发文档\第一行代码(附源码)
            */
        }
    }
}

    